﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using CRC.Incidencias.Presentacion;
using CRC.Incidencias.Dominio.Controladores;
using CRC.Comun.Presentacion;

namespace CRC.Incidencias.Presentacion
{
    public partial class ModificarIncidencia : UsrIncidencia
    {
        private  ControladorModificarIncidencia cMI = new ControladorModificarIncidencia();
        private int intIncidencia;

        public ModificarIncidencia()
        {
            InitializeComponent();
        }
        public ModificarIncidencia(int pIntIncidencia)
            : this()
        {
            this.intIncidencia = pIntIncidencia;
            CargarQuienSolucionaincidencia();
            ObtenerInformacionIncidencia(pIntIncidencia);
        }

        private void ObtenerInformacionIncidencia(int pIntIncidencia) 
        {
            try
            {
                Object[] incidencia = cMI.ObtenerInformacionIncidencia(pIntIncidencia);
                txtCodigoConcepto.Text = (String)incidencia[0];
                txtDescripcionConcepto.Text = (String)incidencia[1];
                cmbQuienAtiendeIncidencia.SelectedKey = (int)incidencia[2];
                if (incidencia[3] != null)
                {
                    dateLimite.Checked = true;
                    dateLimite.Value = (DateTime)incidencia[3];
                } 
                txtObservaciones.Text = (String)incidencia[4];

            }
            catch (Exception ex) {

                MessageBox.Show("Error al cargar la incidencia.\nDetalle: " + ex.Message, 
                    "Error", MessageBoxButtons.OK, MessageBoxIcon.Error
                );   
            }
        }

        private void CargarQuienSolucionaincidencia()
        {
            try
            {
                cmbQuienAtiendeIncidencia.SetData(cMI.ListaQuienAtenderaIncidencias());
                cmbQuienAtiendeIncidencia.addItem(-1, "Sin asignar");
            }
            catch (ApplicationException aEx) 
            {
                MessageBox.Show(
                    aEx.Message, "Advertencia", 
                    MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            catch (Exception ex)
            {
                MessageBox.Show(
                    ex.Message, "Error",
                    MessageBoxButtons.OK, MessageBoxIcon.Error
                );
            }
        }

        protected override void butOK_Click(Object sender, System.EventArgs e)
        {
            if (txtDescripcionConcepto.Text.Trim().Length == 0 || 
                txtObservaciones.Text.Length == 0 
                //|| cmbQuienAtiendeIncidencia.SelectedIndex == -1
            )
            {
                MessageBox.Show(
                    "Faltan campos obligatorios por cumplimentar", "Advertencia", 
                    MessageBoxButtons.OK, MessageBoxIcon.Warning
                );
            }
            else
            {
                try
                {
                    DateTime? fechaLimite = null;
                    if (dateLimite.Checked) fechaLimite = dateLimite.Value;

                    cMI.ModificarIncidencia(
                         txtCodigoConcepto.Text,
                        (int)cmbQuienAtiendeIncidencia.SelectedKey,
                        fechaLimite, 
                        txtObservaciones.Text.Trim(), 
                        chkResuelta.Checked
                    );

                    String sDescConcTruncado = txtDescripcionConcepto.Text;
                    if (sDescConcTruncado.Length > 100) sDescConcTruncado = sDescConcTruncado.Substring(0, 100) + "...";

                    foreach (IIncidenciasListener listener in incidenciasListeners) 
                    {
                        listener.modificarIncidencia(
                            intIncidencia, txtCodigoConcepto.Text, sDescConcTruncado, 
                            (String)cmbQuienAtiendeIncidencia.SelectedItem, dateLimite.Value, 
                            txtObservaciones.Text, chkResuelta.Checked
                        );
                    }
                    this.Dispose();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(
                        ex.Message, "Error", 
                        MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1
                    );
                }
            }
        }
    }
}
